/******************************************************************************* * Copyright (c) 2000, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ant.internal.ui.preferences; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; /** * Content provider that maintains a generic list of objects which are shown in a table viewer. */ public class AntContentProvider implements IStructuredContentProvider { protected List<Object> elements = new ArrayList<>(); protected TableViewer tableViewer; private ViewerComparator fComparator = null; /** * @since 3.5 */ private boolean defaultcomparator = true; /** * Default Constructor */ public AntContentProvider() { } /** * Constructor * * @param defaultcomparator * if the default comparator should be used for the returned data * @since 3.5 */ public AntContentProvider(boolean defaultcomparator) { this.defaultcomparator = defaultcomparator; } /** * Add an element to the current listing of elements and to the underlying viewer. Does nothing if the listing already contains the given element * * @param o */ public void add(Object o) { if (elements.contains(o)) { return; } elements.add(o); tableViewer.add(o); tableViewer.setSelection(new StructuredSelection(o), true); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { // do nothing } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ @Override public Object[] getElements(Object inputElement) { return elements.toArray(); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { tableViewer = (TableViewer) viewer; elements.clear(); if (newInput != null) { if (defaultcomparator) { tableViewer.setComparator(getComparator()); } List<?> list; if (newInput instanceof List) { list = ((List<?>) newInput); } else { list = Arrays.asList((Object[]) newInput); } elements.addAll(list); } } /** * Removes the given element from the listing of elements and from the backing viewer. * * @param o */ public void remove(Object o) { elements.remove(o); tableViewer.remove(o); } /** * Removes the given selection of the listing of elements and from the backing viewer * * @param selection */ public void remove(IStructuredSelection selection) { Object[] array = selection.toArray(); elements.removeAll(Arrays.asList(array)); tableViewer.remove(array); } /** * Returns the default comparator which compares the {@link #toString()} value of the elements for ordering * * @return the default comparator */ protected ViewerComparator getComparator() { if (fComparator == null) { fComparator = new ViewerComparator() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public int compare(Viewer viewer, Object e1, Object e2) { return e1.toString().compareToIgnoreCase(e2.toString()); } }; } return fComparator; } }